import router from '@/router'
import nprogress from 'nprogress'
import 'nprogress/nprogress.css'
import store from '@/store'
import { asyncRoutes } from '@/router'
import { addChildrenRoutes } from '@/router'

const whiteList = ['/login', '/404'] // 白名单，不需要登录也可以访问的页面

/**
 * 前置守卫
*/
router.beforeEach(async(to, from, next) => {
  // 开启进度条
  nprogress.start()

  if (store.getters.token) { // 存在token，已登录
    if (to.path === '/login') { // 此时再访问登录页，直接拦截到首页
      next('/')
      // 手动关闭进度条，因为next('有地址')不会触发后置守卫
      nprogress.done()
    } else { // 如果访问非登录页直接跳转
      // 如果还没有获取用户信息，就获取用户信息
      if (!store.getters.userId) {
        await store.dispatch('user/getUserInfo')
        // 筛选出有权限的路由
        const filterRoutes = asyncRoutes.filter(item => {
          return store.getters.roles.menus.includes(item.name)
        })
        addChildrenRoutes('layout', filterRoutes)
        next(to.path)
      }
      next()
    }
  } else { // 不存在token，未登录
    if (whiteList.includes(to.path)) { // 访问白名单页面，直接跳转
      next()
    } else { // 访问非白名单页面，拦截到登录页
      next('/login')
      // 手动关闭进度条
      nprogress.done()
    }
  }
})

/**
 * 后置守卫
*/
router.afterEach((to, from, next) => {
  // 关闭进度条
  nprogress.done()
})
